using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._Visibility
{
    /// <summary>
    /// <para>Skyline Graph</para>
    /// <para>Calculates sky visibility and generates an optional table and polar graph.</para>
    /// <para>计算天空能见度并生成可选表格和极坐标图。</para>
    /// </summary>    
    [DisplayName("Skyline Graph")]
    public class SkylineGraph : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SkylineGraph()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_observer_point_features">
        /// <para>Input Observer Point Features</para>
        /// <para>The input features containing one or more observer points.</para>
        /// <para>包含一个或多个观察点的输入要素。</para>
        /// </param>
        /// <param name="_in_line_features">
        /// <para>Input Line Features</para>
        /// <para>The line features that represent the skyline.</para>
        /// <para>表示天际线的线要素。</para>
        /// </param>
        public SkylineGraph(object _in_observer_point_features, object _in_line_features)
        {
            this._in_observer_point_features = _in_observer_point_features;
            this._in_line_features = _in_line_features;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Skyline Graph";

        public override string CallName => "3d.SkylineGraph";

        public override List<string> AcceptEnvironments => ["extent", "geographicTransformations", "workspace"];

        public override object[] ParameterInfo => [_in_observer_point_features, _in_line_features, _base_visibility_angle, _additional_fields.GetGPValue(), _out_angles_table, _out_graph, _out_visibility_ratio];

        /// <summary>
        /// <para>Input Observer Point Features</para>
        /// <para>The input features containing one or more observer points.</para>
        /// <para>包含一个或多个观察点的输入要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Observer Point Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_observer_point_features { get; set; }


        /// <summary>
        /// <para>Input Line Features</para>
        /// <para>The line features that represent the skyline.</para>
        /// <para>表示天际线的线要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Line Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_line_features { get; set; }


        /// <summary>
        /// <para>Base  Visibility Angle</para>
        /// <para>The baseline vertical angle that is used for calculating the percentage of visible sky. 0 is the horizon, 90 is straight up; -90 is straight down. The default is 0.</para>
        /// <para>用于计算可见天空百分比的基线垂直角。0 是地平线，90 是直线向上;-90 是直线下降。默认值为 0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Base  Visibility Angle")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _base_visibility_angle { get; set; } = 0;


        /// <summary>
        /// <para>Additional Fields</para>
        /// <para><xdoc>
        ///   <para>Indicates whether additional fields will be added to the angles table.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Additional fields will not be added. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Additional fields will be added.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示是否将其他字段添加到角度表中。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不会添加其他字段。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将添加其他字段。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Additional Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _additional_fields_value _additional_fields { get; set; } = _additional_fields_value._false;

        public enum _additional_fields_value
        {
            /// <summary>
            /// <para>ADDITIONAL_FIELDS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ADDITIONAL_FIELDS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_ADDITIONAL_FIELDS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_ADDITIONAL_FIELDS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Angles Table</para>
        /// <para>The table to be created for outputting the angles.</para>
        /// <para>要创建的用于输出角度的表格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Angles Table")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_angles_table { get; set; } = null;


        /// <summary>
        /// <para>Output Graph Name</para>
        /// <para>This parameter is not supported.</para>
        /// <para>不支持此参数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Graph Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_graph { get; set; } = null;


        /// <summary>
        /// <para>Visibility Ratio</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Visibility Ratio")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public double _out_visibility_ratio { get; set; }


        public SkylineGraph SetEnv(object extent = null, object geographicTransformations = null, object workspace = null)
        {
            base.SetEnv(extent: extent, geographicTransformations: geographicTransformations, workspace: workspace);
            return this;
        }

    }

}